﻿using System;
using System.Collections.Generic;
using System.Linq;
using Acamps.Framework.BancoDados;
using Acamps.Framework.SessionFactory;

namespace Acamps.Framework.NegocioRegras
{
    public class EventoNegocio
    {
        private AcessoDados _acessoDados;

        internal EventoNegocio(string conexao)
        {
            _acessoDados = new AcessoDados(conexao);
        }

        public Evento Salvar(Evento acampamento)
        {
            if (acampamento.Id == Guid.Empty)
            {
                acampamento.Id = Guid.NewGuid(); 
                _acessoDados.Entidade.AddToEventoes(acampamento);
            }
        
            _acessoDados.Entidade.SaveChanges();

            return acampamento;
        }

        public Evento RecuperarEvento(Guid acampamentoId)
        {
            var evento = _acessoDados.Entidade.Eventoes.FirstOrDefault(x => x.Id == acampamentoId);

            if (!evento.TipoEventoReference.IsLoaded) evento.TipoEventoReference.Load();

            return evento;
        }

        public IQueryable<Evento> ListarAcampamentos(bool somenteAtivos)
        {
            return _acessoDados.Entidade.Eventoes.Where(x => x.Ativo == somenteAtivos);
        }

        public Evento RecuperarUltimoAcampamentoVigente()
        {
            return _acessoDados.Entidade.Eventoes.FirstOrDefault(x => x.Ativo == true && x.Vigente == true && x.LiberarFichas == true);
        }
    }
}

